package com.judysen.jsqlweb.mybatis.mapper;

import com.judysen.jsqlweb.mybatis.dto.ColumnInfo;
import com.judysen.jsqlweb.mybatis.dto.TableInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 基础mapper
 */
public interface BaseMapper {
    /**
     * 获取数据库下所有的表明细
     *
     * @param databaseName
     * @return
     */
    List<String> getTableNames(String databaseName);

    /**
     * 获取表下，所有的字段信息
     *
     * @param tableName
     * @return
     */
    List<ColumnInfo> getColumnInfos(String tableName);

    /**
     * 保存数据
     *
     * @param tableName
     * @param kv
     * @return
     */
    int save(@Param("tableName") String tableName, @Param("kv") Map<String, Object> kv);

    /**
     * 更新数据
     *
     * @param tableName
     * @param kv
     * @return
     */
    int update(@Param("tableName") String tableName,@Param("id") Object id,@Param("kv") Map<String, Object> kv);

    /**
     * 删除----
     * @param table
     * @param id
     * @return
     */
    int delete(@Param("tableName") String table,@Param("id") Serializable id);
    /**
     * 查询分页数据
     *
     * @param tableName
     * @param filter    查询条件
     * @return
     */
    List<Map<String, Object>> selectPage(@Param("tableName") String tableName, @Param("offset") int offset, @Param("pageSize") int pageSize,
                                         @Param("filter") Map<String, Object> filter);

    /**
     * 与selectPage结合使用，实现分页查询
     *
     * @param tableName
     * @param filter    查询条件
     * @return
     */
    Integer selectTotalCount(@Param("tableName") String tableName, @Param("filter") Map<String, Object> filter);

    /**
     * 查询单个数据
     *
     * @param tableName
     * @param id
     * @return
     */
    Map<String, Object> selectOne(@Param("tableName") String tableName, @Param("id") Serializable id);
}